Este contenido ofrece instrucciones detalladas sobre cómo escribir en una blockchain utilizando el Sequence SDK. Explica cómo manejar transacciones de forma asíncrona, incluyendo transacciones en bruto, transferencias de tokens ERC20, ERC721 y ERC1155, así como interacciones con contratos inteligentes.
Transactions
.
Enviar una transacción es una tarea asíncrona. Puede usar await
al llamar a SequenceWallet.SendTransaction
si desea obtener directamente el objeto TransactionReturn
. O bien, puede optar por la forma recomendada, que es configurar funciones manejadoras para los eventos SequenceWallet.OnSendTransactionComplete
y SequenceWallet.OnSendTransactionFailed
, y llamar al método SequenceWallet.SendTransaction
desde cualquier lugar (sin await). Por ejemplo:
Transaction
, una transacción en bruto, es muy útil para enviar ETH o la moneda de gas de la red con la que está interactuando a una Address
.
Por ejemplo, para enviar un MATIC a 0x9766bf76b2E3e7BCB8c61410A3fC873f1e89b43f
puede usar este fragmento:
1000000000000000000
(1 * 10^18), ya que ETH, MATIC y la mayoría de las monedas de gas tienen un valor de “decimales” de 18. DecimalNormalizer.Normalize
(arriba) es una función auxiliar básica que devuelve valor de entrada * 10^decimales
y acepta opcionalmente un valor de “decimales” como segundo parámetro (por defecto 18 si no se proporciona).
Adicionalmente, puede incluir datos en una transacción en bruto en formato hexadecimal como una cadena. Para más información sobre esto, consulte la sección avanzada de esta documentación.
DecimalNormalizer.Normalize
para convertir el monto de formato legible para humanos a formato EVM. Asegúrese de incluir el parámetro opcional “decimales” (int) si su token ERC20 tiene un valor de “decimales” diferente a 18. Si no está seguro de cuántos “decimales” tiene su ERC20, esto se puede consultar fácilmente en el Builder usando el método “decimals” en “Read Contract”.
SequenceEthereum
incluida en el SDK. Hemos creado funciones envoltorias para contratos inteligentes ERC20 para su conveniencia, que le permiten crear y enviar RawTransactions
con Embedded Wallets.
Primero, debe crear un objeto ERC20
proporcionando una dirección de contrato y, opcionalmente, una cadena ABI, si está usando una variante personalizada del estándar ERC20 (no recomendado).
CallContractFunction
, por ejemplo Mint
, puede usarse al crear una RawTransaction con Embedded Wallets. Por ejemplo:
SequenceEthereum
incluida en el SDK. Hemos creado funciones envoltorias para contratos inteligentes ERC721 para su conveniencia, que le permiten crear y enviar RawTransactions
con Embedded Wallets.
Primero, debe crear un objeto ERC721
proporcionando una dirección de contrato y, opcionalmente, una cadena ABI, si está usando una variante personalizada del estándar ERC721 (no recomendado).
CallContractFunction
, por ejemplo SafeMint
, puede usarse al crear una RawTransaction con Embedded Wallets. Por ejemplo:
SendERC1155Values
en la transacción
SequenceEthereum
incluida en el SDK. Hemos creado funciones envoltorias para contratos inteligentes ERC1155 para su conveniencia, que le permiten crear y enviar RawTransactions
con Embedded Wallets.
Primero, debe crear un objeto ERC1155
proporcionando una dirección de contrato y, opcionalmente, una cadena ABI, si está usando una variante personalizada del estándar ERC1155 (no recomendado).
CallContractFunction
, por ejemplo Mint
, puede usarse al crear una RawTransaction con Embedded Wallets. Por ejemplo:
payable
en la definición del contrato inteligente. Si está llamando a un método payable, se recomienda usar DecimalNormalizer.Normalize
para convertir el monto de formato legible para humanos a formato EVM. Tenga en cuenta que el usuario deberá tener los fondos necesarios en su wallet para pagar el valor especificado a una función payable. Este parámetro puede omitirse y tomará el valor por defecto “0”.
FunctionABIAsString: La función con la que planea interactuar. Le recomendamos copiar y pegar la firma de la función (con los parámetros) desde el código fuente del contrato en Etherscan (o el explorador de bloques correspondiente para su red) y eliminar los espacios en blanco y los nombres de las variables.
ParametersAsObjectArray: Los parámetros que desea proporcionar al método que quiere llamar. No es necesario indicar los nombres de los parámetros, solo sus valores en el orden en que aparecen en el ABI. Si tiene dudas, proporcione los parámetros en formato de cadena.
Juntando todo esto, un ejemplo de cómo usar SequenceContractCall
para llamar a la función “mint” en un ERC20 se vería así:
SendTransaction
.
Por ejemplo: enviar una transacción de cada tipo en un lote:
FeeOptionsResponse
contiene un FeeQuote (cadena) que fija el precio para cada FeeOptionReturn
en el arreglo FeeOptions que se devuelve por un tiempo limitado; necesitará esto en un momento al enviar sus transacciones. Para su comodidad, el SDK consultará automáticamente el wallet del usuario para ver cuáles de las FeeOptions puede pagar usando el Indexer.
A partir de aquí, puede mostrar una interfaz al usuario para que elija cómo desea pagar la comisión de sus transacciones.
Una vez que el usuario haya elegido cómo desea pagar la comisión, puede enviar las transacciones, incluyendo la FeeOption seleccionada y la cadena FeeQuote.
Demo Scene
que se puede importar desde Package Manager > Samples
, puede ver un ejemplo básico del uso de FeeOptions. Aquí no se proporciona una interfaz y en su lugar se usa la primera FeeOption disponible en el wallet del usuario. No recomendamos este enfoque en un juego real, pero sirve como ejemplo útil para su propia integración. Vea nuestro código de ejemplo a continuación:
TransactionQueuer
flexible en el SDK que puede configurar o extender según sus necesidades. Para aprender más sobre cómo construir juegos con muchas transacciones en Unity y qué considerar, consulte nuestra guía sobre el tema.
Cuando agrega un TransactionQueuer
como MonoBehaviour en su escena, hay algunas variables de configuración que puede ajustar.
AutoSubmitTransactions
: por defecto es falso; si lo habilita, su TransactionQueuer
enviará automáticamente cualquier transacción en cola cuando hayan pasado los segundos definidos en ThresholdTimeBetweenTransactionsAddedBeforeSubmittedInSeconds
sin que se agregue una nueva transacción a la cola.ThresholdTimeBetweenTransactionsAddedBeforeSubmittedInSeconds
: si AutoSubmitTransactions == true
, enviará automáticamente las transacciones en cola si no se ha agregado ninguna en los últimos ThresholdTimeBetweenTransactionsAddedBeforeSubmittedInSeconds
segundos.MinimumTimeBetweenTransactionSubmissionsInSeconds
: tiempo mínimo entre envíos de transacciones en cola. Con esto, puede llamar a TransactionQueuer.SubmitTransactions()
tantas veces como quiera en su código y las transacciones no se enviarán a menos que hayan pasado los segundos definidos desde el último envío. Nota: si llama a TransactionQueuer.SubmitTransactions(overrideWait: true)
con el parámetro opcional overrideWait
en true, el TransactionQueuer
enviará las transacciones en cola sin importar si ha pasado el tiempo mínimo.TransactionQueuer
le ofrece varios métodos:
TransactionQueuer
, por favor llame a Setup
; esto creará y almacenará en caché las dependencias necesarias.TransactionQueuer
. Si overrideWait = true
, envía cualquier transacción en cola de inmediato. Si waitForReceipt = false
, devuelve el TransactionReturn
tan pronto como recibimos respuesta de la WaaS API (nota: esto solo es relevante si la WaaS API se agota esperando el recibo de la transacción; si waitForReceipt = true
, seguiremos consultando un nodo hasta obtener el recibo antes de devolverlo)Setup
en su TransactionQueuer
!TransactionQueuer
.
SequenceWalletTransactionQueuer
le permite poner en cola transacciones para el Embedded Wallet de Sequence de su usuario.
El SequenceWalletTransactionQueuer
espera que agregue transacciones que implementen la interfaz IQueueableTransaction
. Esta interfaz la implementa la clase QueuedTokenTransaction
. Si lo necesita, puede crear otras clases que implementen la interfaz IQueueableTransaction
.
PermissionedMinterTransactionQueuer
está pensado para poner en cola transacciones que serán enviadas por su servidor backend al recibir un mensaje firmado desde el Embedded Wallet del jugador. Es útil para mintear tokens al wallet del jugador cuando interactúa con contratos que requieren permisos para mintear (la mayoría de los contratos de tokens).
El PermissionedMinterTransactionQueuer
espera que agregue un PermissionedMintTransaction
, un objeto de transferencia de datos básico que especifica el TokenId y la cantidad a mintear, y opcionalmente un IMinter. Si no se proporciona, el PermissionedMinterTransactionQueuer
usará por defecto la clase PermissionedMinter
. La clase PermissionedMinter
será útil para la mayoría de los casos; envía un payload en el siguiente formato: